package com.lqian.set;

import java.util.HashSet;

/**
 * @Author Melody_LQ
 * @Date 2021/8/12 14:37
 * @Description
 * 1.HashSet 是set接口的实现类
 * 2.HashSet实际上是HashMap
 *      * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
 *      * default initial capacity (16) and load factor (0.75).
 *      public _HashSet(){
 *          map=new HashMap<>();
 *      }
 * 3.可以存放null值，但只能有一个null
 *
 * 4. HashSet不保证元素是有序的，取决于hash后，再确定索引的结果
 *    它不保证set的迭代顺序，特别是它不保证该顺序永久不变
 * 5. HashSet不能有重复元素/对象
 *
 * @Since version-1.0
 */
public class _HashSet {
    public static void main(String[] args) {
        HashSet hashSet = new HashSet();
        hashSet.add("Jack");
        hashSet.add("Tom");
        //可以存放null值，但只能有一个null
        hashSet.add("null");
        hashSet.add("Jack");
        hashSet.add("null");
        //HashSet不保证元素是有序的，取决于hash后，再确定索引的结果
        //（即：不能保证存放元素的顺序和取出元素的顺序一致）
        System.out.println(hashSet);

       // HashSet不能添加重复元素/对象？
        hashSet = new HashSet<>();
        hashSet.add("jack");// ok True
        hashSet.add("Jack"); // ok True
        hashSet.add("jack"); // no False
        hashSet.add(new Dog("Tom")); // ok True
        hashSet.add(new Dog("Tom")); // ok True
        System.out.println(hashSet);// [Dog{name='Tom'}, Dog{name='Tom'}, Jack, jack]

        // 深入
        hashSet.add(new String("LQ"));//ok True
        hashSet.add(new String("LQ"));// no False
        System.out.println(hashSet);
    }
}

class Dog{
    String name;

    public Dog(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                '}';
    }
}
